//****************************************************************************//
//* CI7 Libreria grafica                                                     *//
//*	ci7_emotion.cpp        				     						     	 *//
//*																			 *//
//* ci7.hddisseny.es                                                         *//
//* hddisseny@ci7.hddisseny.es                                               *//
//*																			 *//
//*	Ultima revision - 22/04/2012    										 *//
//*	TODO:																	 *//
//*	Mejorar el sistema de recogida de eventos para poder disponer de todos   *//
//*	los sistema al mismo tiempo.											 *//
//****************************************************************************//

#include "ci7.hpp"

/*  CI7_Emotion::EmotionEngine( void )

    Usamos un evento principal para recoger los valores que puedan suceder en el
    momento de la llamada al metodo. Logicamente este metodo tiene el problema
    de devolver solamente uno de los eventos, no pudiendo ser compatible con mas
    de una accion a la vez.

    Miramos si ha ocurrido un evento. De ser asi, miramos que tipo de evento es
    de teclado y devolvemos el valor. Aqui realmente hemos redefinido a SDL_KEY
    por CI7_KEY para mantener una mejor sintaxys. Devuelve el valor SDL_KEY
    y lo reemplaza de la lista que existe en ci7_defines.hpp.
    Despues generamos una llamada a proposito a los eventos para registrar
    las coordenadas del raton, y registrar si se pulsa alguno de los botones.
    Por ultimo devuelve el valor de los eventos por el propio metodo.
    Tambien rellena las variables de EmotionMouseInfo con la posicion y si se ha
    pulsado algun boton asignandole su valor correspondiente.
*/
int CI7_Emotion::EmotionEngine( void ) {

    while ( SDL_PollEvent( &_ci7Int_EmotionEvent ) ) {
        switch(_ci7Int_EmotionEvent.type) {
        case SDL_KEYDOWN:
            _ci7Int_EventEmotionReturnSucced = _ci7Int_EmotionEvent.key.keysym.sym;
            break;
        case SDL_QUIT:
            _ci7Int_EventEmotionReturnSucced = -1;
            break;
        default:
            _ci7Int_EventEmotionReturnSucced = 0;
            break;
        }
    }

    SDL_PumpEvents();
    SDL_GetMouseState( &EmotionMouseInfo.x , &EmotionMouseInfo.y );
    if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1)) {
        _ci7Int_EventEmotionReturnSucced = CI7_MOUSE_BTT1;
        EmotionMouseInfo.button = CI7_MOUSE_BTT1;
    }
    if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(2)) {
        _ci7Int_EventEmotionReturnSucced = CI7_MOUSE_BTT2;
        EmotionMouseInfo.button = CI7_MOUSE_BTT2;
    }
    if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(3)) {
        _ci7Int_EventEmotionReturnSucced = CI7_MOUSE_BTT3;
        EmotionMouseInfo.button = CI7_MOUSE_BTT3;
    }
    if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(4)) {
        _ci7Int_EventEmotionReturnSucced = CI7_MOUSE_BTT4;
        EmotionMouseInfo.button = CI7_MOUSE_BTT4;
    }
    if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(5)) {
        _ci7Int_EventEmotionReturnSucced = CI7_MOUSE_BTT5;
        EmotionMouseInfo.button = CI7_MOUSE_BTT5;
    }
    if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(6)) {
        _ci7Int_EventEmotionReturnSucced = CI7_MOUSE_BTT6;
        EmotionMouseInfo.button = CI7_MOUSE_BTT6;
    }
    if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(7)) {
        _ci7Int_EventEmotionReturnSucced = CI7_MOUSE_BTT7;
        EmotionMouseInfo.button = CI7_MOUSE_BTT7;
    }

    return _ci7Int_EventEmotionReturnSucced;
};

/*   CI7_Emotion::EmotionMouseEventShow ( int FLAG )

    Mostramos o escondemos el cursor del raton haciendo una llamada a
    la funcion de la propia libreria SDL. De esta manera podemos
    hacer una funcion algo mas elegante y rapida sobre el mostrar o no
    dicho cursor.
*/
void CI7_Emotion::EmotionMouseEventShow ( int iSHOW ) {
    switch ( iSHOW ) {
    case 0:
        SDL_ShowCursor ( SDL_DISABLE );
        EmotionMouseInfo.show = 0;
        break;
    case 1:
        SDL_ShowCursor ( SDL_ENABLE );
        EmotionMouseInfo.show = 1;
        break;
    }
}
